$(function(){
  // navigationで、選択アンカーをハイライト表示する。
  var changeSelected = function(href){
    $("a.js-pjax").each(function(){
      var href_ = $(this).attr("href");
      $(this).parent()[href_ == href ? "addClass" : "removeClass" ]("selected");
    });
  }

  // History APIをサポートしていなければ何もしない
  if (window.history && window.history.pushState) {
    var initState = true; // 初期フラグ


    // pjax処理
    // file は、GETするファイル。push がtrueの時は、pushState()を行う。
    var pjaxGet = function(file, push) {
      $.ajax({type:"get",
        url:"pjax/"+file,
        dataType:"html",
        success:function(data){
          $("#content").hide().html(data).fadeIn();
        },
        error:function(req, stat, e) {
          throw(e);
        }
      });
      if(push) window.history.pushState(null,null,file);
      changeSelected(file);
    }

    // 'popstate'イベント（ブラウザの戻る、進むボタン）発生時の
    // 処理。$(window).load時にも、このイベントは発生するので、
    // その際はスルーしている。
    $(window).bind('popstate', function(e){
      if(initState) {
        initState = false;
        return;
      }

      var file_ = location.href.match(/[0-9a-zA-Z-_]+\.php$/);
      pjaxGet(file_, false);
      changeSelected(file_);
    });

    // 指定クラスのアンカーに対して、pjax処理を行う。preventDefault()により
    // デフォルトのページ切り替え操作を無効化している
    $("a.js-pjax").each(function(e){
      // コンテキストメニュー(右クリックなど）の時は、pjax処理はしない
      if ( e.which > 1 || e.metaKey )
        return true
     
      // アンカーリンクに対して、pjax動作をセットする。
      $(this).click(function(e){
        var href_ = $(this).attr("href");
        pjaxGet(href_, true);
        e.preventDefault();
      });
    });
  }

});
